package com.wuzao.dataStructure.dequeTest;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * ArrayDeque 是 Java 中的一个双端队列（Deque）实现类，基于动态数组实现。
 *
 * 它既可以作为队列（FIFO，先进先出）使用，
 * 也可以作为栈（LIFO，后进先出）使用。
 *
 * ArrayDeque 是线程不安全的，但性能优于 LinkedList，尤其是在频繁的插入和删除操作中。
 */
public class ArrayDequeTest {
    public static void main(String[] args) {
        // 创建一个 ArrayDeque
        Deque<String> deque = new ArrayDeque<>();

        // =============== 作为队列使用（FIFO） offer,poll
        deque.offer("A"); // 队尾添加元素
        deque.offer("B");
        deque.offer("C");
        System.out.println("Queue: " + deque);

        // 获取队头元素
        System.out.println("Peek: " + deque.peek()); // A

        // 移除队头元素
        System.out.println("Poll: " + deque.poll()); // A
        System.out.println("Queue after poll: " + deque); // [B, C]

        // ================ 作为栈使用（LIFO） push,pop
        deque.push("X"); // 队头添加元素（栈顶）
        deque.push("Y");
        System.out.println("Stack: " + deque);

        // 获取栈顶元素
        System.out.println("Peek: " + deque.peek()); // Y

        // 移除栈顶元素
        System.out.println("Pop: " + deque.pop()); // Y
        System.out.println("Stack after pop: " + deque); // [X, B, C]
    }
}
